<!-- 评分题 -->

<template>
  <div class="flex1">
    <OurTitle v-bind="$props" />

    <div class="QuestionnaireList-flex">
      <FormInput
        v-for="i in obj.max"
        :key="i"
        :one="obj"
        :bind="`tip_${i}`"
        :tip="`${CORE.numCN(i)}星描述`"
        :max="obj.max === 10 ? 4 : 8"
        :disabled="obj.rule !== 'diy'"
        flex1
        @change="resetTip"
      />
      <div class="flex0">描述</div>
      <FormRadio :one="obj" bind="rule" :dict="DICT.RATE" :width="220" initFirst noClear flex0 @change="resetTip" />
    </div>

    <div class="QuestionnaireList-flex">
      <div class="QuestionnaireList-remark">底部备注</div>
      <OurRemark v-bind="$props" />

      <div class="flex0">星数</div>

      <FormRadio :one="obj" bind="max" :dict="STAR" :width="220" initFirst @change="resetTip" />
    </div>
  </div>
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import props from '../props'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'MyRate',

  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [CORE.mixWeb()],

  /**
   * 组件导入 (Abc.vue + Abc/index.vue)
   */
  ...CORE.components(require.context('../components', true, /vue$/)),

  /**
   * 属性注册 (抽取以便查阅)
   */
  props,

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 星数
     */
    STAR: () => [
      [5, '五星'],
      [10, '十星'],
    ],
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 重置描述
     */
    resetTip() {
      const { obj } = this
      const tipMap = {}

      if (!obj.max) obj.max = 5

      if (obj.rule === 'init') {
        Array(10).fill().map((_, i) => {
          obj[`tip_${i + 1}`] = tipMap[i + 1] = CORE.dict(CORE.DICT[`RATE${obj.max}`], i + 1)
        })
      }
      if (obj.rule === 'none') {
        Array(10).fill().map((_, i) => {
          obj[`tip_${i + 1}`] = tipMap[i + 1] = ''
        })
      }
      if (obj.rule === 'diy') {
        Array(10).fill().map((_, i) => {
          tipMap[i + 1] = obj[`tip_${i + 1}`]
        })
      }
      obj.tip = JSON.stringify(tipMap)
    },
  },
}
</script>
